home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / prg_gen / euphor14.zip / DATABASE.BAS < prev    next >
BASIC Source File  |  1994-06-05  |  4KB  |  156 lines

  1. DECLARE SUB purge ()
  2. '$DYNAMIC
  3.  
  4. DEFINT A-Z
  5.  
  6. CONST BATCH = 200
  7. CONST BENCHTIME = 15
  8.  
  9. TYPE rd
  10.   pname AS STRING * 20
  11.   amount AS DOUBLE
  12.   code AS INTEGER
  13. END TYPE
  14.  
  15. TYPE dbrec
  16.   pname AS STRING * 20
  17.   amount AS DOUBLE
  18. END TYPE
  19.  
  20. DECLARE SUB dump ()
  21. DECLARE SUB xupdate (datastream() AS rd)
  22.  
  23. DIM SHARED database(0) as dbrec
  24. 'backup array needed because REDIM wipes out your data
  25. DIM SHARED database2(0) as dbrec
  26.  
  27. CONST INPUTSIZE = 30
  28.  
  29. REM update commands
  30. CONST NEW = 1      ' add a new account
  31. CONST UPDATE = 2   ' add/substract from their account
  32. CONST DELETE = 3   ' delete someone's account
  33.  
  34. DIM SHARED rawdata(INPUTSIZE) AS rd
  35. DATA "George Bush", 1000, 1
  36. DATA "Bill Clinton", 2000, 1
  37. DATA "Brian Mulroney", 500, 1
  38. DATA "Ross Perot", 10000, 1
  39. DATA "Ross Perot", 0, 3
  40. DATA "George Bush", -30.55, 2
  41. DATA "Madonna", 2500, 1
  42. DATA "Boris Yeltsin", 100, 1
  43. DATA "Michael Jackson", 50, 1
  44. DATA "Peter Mansbridge", 1200, 1
  45. DATA "Bill Clinton", +500, 2
  46. DATA "Rod Stewart", 3000, 1
  47. DATA "Boris Yeltsin", 0, 3
  48. DATA "Sharon Stone", 1500, 1
  49. DATA "Clint Eastwood", 1900, 1
  50. DATA "Madonna", 0, 3
  51. DATA "Sally Jessy Raphael", 750, 1
  52. DATA "Brian Mulroney", -400, 3
  53. DATA "Richard Gere", 299, 1
  54. DATA "Rod Stewart", 0, 3
  55. DATA "Demi Moore", 350, 1
  56. DATA "Bruce Willis", 480, 1
  57. DATA "Sharon Stone", +900.50, 2
  58. DATA "Arsenio Hall", 300, 1
  59. DATA "David Letterman", 450, 1
  60. DATA "Whoopi Goldberg", 1050, 1
  61. DATA "Clint Eastwood", +2500, 2
  62. DATA "Michael Jackson", -50, 2
  63. DATA "Clint Eastwood", 0, 3
  64. DATA "Jack Nicholson", 3000, 1
  65.  
  66. DIM SHARED size
  67. size = 0  'current database size
  68.  
  69. FOR i = 0 TO INPUTSIZE - 1
  70.     READ rawdata(i).pname
  71.     READ rawdata(i).amount
  72.     READ rawdata(i).code
  73. NEXT i
  74.  
  75. PRINT "database benchmark ..."
  76. cycles& = 0
  77. t# = TIMER
  78. WHILE TIMER < t# + BENCHTIME
  79.     FOR b = 1 TO BATCH
  80.         purge
  81.         CALL xupdate(rawdata())
  82.     NEXT b
  83.     cycles& = cycles& + BATCH * INPUTSIZE
  84. WEND
  85. t# = TIMER - t#
  86. PRINT USING "##### transactions per second"; cycles& / t#
  87. dump
  88.  
  89. SYSTEM
  90.  
  91. SUB dump
  92. REM used to verify that program works correctly
  93. REM not part of timing loop
  94.     FOR i = 0 TO size - 1
  95.     PRINT database(i).pname, database(i).amount
  96.     NEXT i
  97. END SUB
  98.  
  99. SUB purge
  100. REM empty the database - free all storage
  101.     size = 0
  102.     REDIM database(0)
  103.     REDIM database2(0)
  104. END SUB
  105.  
  106. SUB xupdate (datastream() AS rd)
  107.     FOR i = 0 TO INPUTSIZE - 1
  108.     transactioncode = datastream(i).code
  109.     
  110.     IF transactioncode = NEW THEN
  111.         FOR j = 0 TO size - 1 
  112.             database2(j) = database(j)
  113.         NEXT j
  114.         size = size + 1
  115.         REDIM database(size)
  116.         FOR j = 0 TO size - 2
  117.         database(j) = database2(j)
  118.         NEXT j
  119.         database(size - 1).pname = datastream(i).pname
  120.         database(size - 1).amount = datastream(i).amount
  121.         REDIM database2(size)
  122.  
  123.     ELSE
  124.         REM look up name
  125.         pname$ = datastream(i).pname
  126.         FOR accountno = 0 TO size - 1
  127.         IF pname$ = database(accountno).pname THEN
  128.             EXIT FOR
  129.         END IF
  130.         NEXT accountno
  131.  
  132.         IF transactioncode = UPDATE THEN
  133.             database(accountno).amount = database(accountno).amount + datastream(i).amount
  134.  
  135.         ELSE  'DELETE
  136.             FOR j = 0 TO size - 1 
  137.                 database2(j) = database(j)
  138.             NEXT j
  139.             size = size - 1
  140.             REDIM database(size)
  141.             j = 0
  142.             FOR k = 0 TO accountno - 1
  143.             database(j) = database2(k)
  144.             j = j + 1
  145.             NEXT k
  146.             FOR k = accountno + 1 TO size
  147.             database(j) = database2(k)
  148.             j = j + 1
  149.             NEXT k
  150.             REDIM database2(size)
  151.         END IF
  152.     END IF
  153.     NEXT i
  154. END SUB
  155.  
  156.